package com.ctwom.algorithm.questions.Blinkedlist;

/**
 * 把链表中给定值都删掉
 * 思路：可能存在头部就是需要删掉的值，所以先确定新的头部，
 * 然后遍历确定下一个不是删掉的值的节点用新头部连上，然后记住这个最近不是删掉的值的节点，继续遍历找到下一个不是删掉的值的节点用最近的不是的连上它。
 */
public class DelSomeNode {
    public static void main(String[] args) {
        Node node2 = new Node(5, null);
        Node node3 = new Node(6, node2);
        Node node4 = new Node(5, node3);
        Node node5 = new Node(4, node4);
        Node node6 = new Node(5, node5);
        Node node7 = new Node(1, node6);
        Node node8 = new Node(5, node7);
        Node node9 = new Node(5, node8);
        delSomeNode(node9, 5);
    }
    public static Node delSomeNode(Node head, int value){
        Node newHead = null;
        //用一个新的链表，先找到头，然后依次往下遍历，把不是我们想删的节点连接起来
        if(head != null){
            while(head.getValue() == value){
                head = head.next;
            }
            newHead = head;//newHead是我最终要返回的新头节点
            Node pre = newHead;//pre是最近一个不是删除元素的节点
            Node next = newHead.next;//每次遍历节点的下一个节点
            while(next != null){
                if(next.getValue() != value){
                    pre.next = next;
                    pre = next;
                }
                next = next.next;
            }
            pre.next = null;
            Node.forEachNodes(newHead);
            System.out.println();
        }
        return newHead;
    }
}
